package L01;
//instance  实例




class Singlelazy{
    private static volatile Singlelazy instance=null;

    //首次调用getInstance的时候，才会去实例化instance
    public Singlelazy getInstance(){//懒汉模式
        if(instance==null){
            synchronized (Singlelazy.class){//加锁保证判断和创建类对象是同一步，避免创建两次对象
                //加锁会拖慢代码的运行速度
                //因为只要第一次对类实例化后，类就是安全的
                if(instance==null){
                    instance=new Singlelazy ();
                }

            }
        }
        //创建两个这样的线程t1和t2，可能会出现异常
        //t1在未完全创建对象时，t2就已经返回对象
        //因为只有t1进行了加锁，t2和t1不会存在锁竞争，（相同的加锁之间会存在锁竞争）

        //加上volatile，代码在执行new（）操作的时候不会进行重排序优化

        return instance;

    }

    private Singlelazy(){}

}
public class T22 {
    public static void main (String[] args) {

    }


}
